// 导入模块
const express = require('express');
const path = require('path');
// 引入body-parser 用来处理post请求参数
const bodyParser = require('body-parser');
// 引入express-session 用来给req对象添加session的属性
const session = require('express-session');
// 导入date-format 第三方模块
const dateFormat = require('dateformat');
//导入art-template模板引擎
const template = require('art-template');
//导入Morgan第三方模板  
const morgan = require('morgan');
// 导入config模块
const config = require('config');



// 引入自己创建的模块
require('./model/connect'); // 连接数据库

// 创建网站服务器
const app = express();


// 处理post请求参数
app.use(bodyParser.urlencoded({ extended: false, }));

app.use(session({
    secret: '随便写的密钥',
    saveUninitialized: false,
    cookie: {
        maxAge: 24 * 60 * 60 * 1000 * 10
    }
}));


// ============================
// 使用模板的三部曲
// 1.告诉express框架模板所在的位置
// views是固定名称
app.set('views', path.join(__dirname, './views'))
// 2.告诉express框架模板的默认后缀
app.set('view engine', 'art');
// 3.当渲染后缀为art的模板时，所使用的模板引擎
app.engine('art', require('express-art-template'));
// ============================

// 向模板中导入dateFormat变量
template.defaults.imports.dateFormat = dateFormat;


// 开放静态资源文件
app.use(express.static(path.join(__dirname, './public')));


console.log(config.get('title'));


// 获取系统环境变量，返回值是对象
if (process.env.NODE_ENV == 'development') {
    // 当前是开发环境
    // 在开发环境中，将客户端发送到服务器的请求信息打印到控制台中
    // app.use(morgan('dev'));
    console.log('当前是开发环境');
} else {
    // 当前是生产环境
    console.log('当前是生产环境');
}


// 导入路由
const home = require('./route/home');
const admin = require('./route/admin');


// 拦截请求，判断用户登录状态
app.use('/admin', (req, res, next) => {
    // 判断用户是否访问的是登录状态
    // 判断用户的登录页面
    // 如果用户是登录的，将请求放行
    // 如果用户不是登录的，将请求重定向到登录页面
    if (req.url != '/login' && !req.session.username) {
        // 如果用户不是在登录页面，且用户没有登录
        res.redirect('/admin/login');
    } else {
        // 如果用户登录状态并且是普通用户
        if(req.session.role=='normal'){
            // 让其跳转到博客首页，阻止程序继续执行
           return res.redirect('/home/');
        }
        next();

    }
});


// 为路由匹配请求路径
app.use('/home', home);
app.use('/admin', admin);

app.use((err, req, res, next) => {
    // 将字符串转换为对象
    const result = JSON.parse(err);
    let params = [];
    for (let attr in result) {
        if (attr != 'path') {
            params.push(attr + '=' + result[attr]);
        }
    }
    res.redirect(`${result.path}?${params.join('&')}`);
})

app.listen(80);

console.log('running at http://localhost:80');

